package com.situ.ymall.admin.controller;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import com.situ.ymall.admin.entity.APIResult;
import com.situ.ymall.admin.entity.Root;
import com.situ.ymall.admin.service.RootService;
import com.situ.ymall.admin.util.TokenUtil;
import com.situ.ymall.admin.util.TokenUtil.Token;
/*
 * 管理员Controller
 */
@RestController
@RequestMapping("/api/roots")
@CrossOrigin(origins = {"*"})
public class RootController {
	
	@Autowired
	private RootService rootService;
	
		/*
		 * 登录 查询
		 * Token :会话保持技术，session cookie	不能跨域
		 * 		实际上就是一个字符串，有服务器生成，交给客户端使用
		 * 		通过加密的方式将登陆用户的信息，保存在Token中，
		 * 		客户端再次执行时，可以带着Token请求，服务器从Token中
		 * 		解密登录用户的信息
		 * 	优势：1.不需要将数据保存到内存中
		 * 		2.不受跨域请求的限制
		 * 可逆的加密算法
		 * 
		 */
	@GetMapping
	public APIResult login(Root root,String vercode,
			String token) {
		// 获取参数
		APIResult apiResult = new APIResult();
		// 判断vercode是否正确
		Token tokn = TokenUtil.parseToken(token);
		if (tokn.getStatus() == 1) {
			apiResult.setStatus(404);
			apiResult.setMsg("验证码已过期");
			return apiResult;
		}
		
		//String oldVercode = (String) session.getAttribute("vercode");
		if (!vercode.toUpperCase().equals(tokn.getCode())) {
			apiResult.setMsg("验证码错误");
			apiResult.setStatus(404);
			
			return apiResult;
		}
		// 调用service层
	
		try {
			Root loginRoot = rootService.login(root);
			//清除密码数据
			loginRoot.setPassword(null);
			//登录成功
			//保存到Token中
			String loginToken = TokenUtil.createToken(loginRoot.getRootname());
			//返回数据
			apiResult.setStatus(200);
			apiResult.setData(loginRoot);
			apiResult.setMsg(loginToken);
		} catch (Exception e) {
			e.printStackTrace();
			//登录失败  返回数据
			apiResult.setStatus(404);
			apiResult.setMsg(e.getMessage());
		}
		// 返回数据
		return apiResult;
	}
	
	@GetMapping("/{token}")
	public APIResult get(@PathVariable("token") String strToken) {
		//解析token
		Token token  = TokenUtil.parseToken(strToken);
		
		// 根据用户名，查询当前登录的用户
		Root root = rootService.getByRootName(token.getCode());
		root.setPassword(null);
		return APIResult.ok(root);
	}
	
	/*
	 * 退出
	 */
	@DeleteMapping
	public APIResult logout(HttpSession session) {
		session.invalidate();
		APIResult apiResult = new APIResult();
		apiResult.setStatus(204);
		return apiResult;
	}
	/*
	 * 修改
	 */
	@GetMapping("/selectById")
	public APIResult getAll(Integer id){
		Root root = rootService.selectById(id);
		return APIResult.ok(root);
	}
	@PutMapping("/edit")
	public APIResult edit(@RequestBody Root root){
		try {
			Root root1 = rootService.edit(root);
			return APIResult.create(root1);
		} catch (Exception e) {
			e.printStackTrace();
			return APIResult.notFound(e.getMessage());
		}
	}
}
